<?php
/**
 * ord_compra actions.
 *
 * @package    SAC_CLonsa
 * @subpackage ord_compra
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */

class pdf_orden_servicioActions extends sfActions
{
 /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */
  public function executeIndex(sfWebRequest $peticion)
  {
    //$this->forward('ord_compra', 'lista');
      if( $peticion->getParameter('idOS') >0  ){
          $this->idOS = $peticion->getParameter('idOS');
      }
      else{
          $this->redirect('pdf_orden_servicio/ordenes');
      }
  }

  public function executeOrdenes(sfWebRequest $peticion)
  {
      $ordenes_de_servicio = OsSolicitantePeer::getOsPor2EstadosOsId(4, 6);
      $this->ordenes_de_servicio = $ordenes_de_servicio;
      foreach ($ordenes_de_servicio as $orden)
      {
          $nombreCompleto = sfGuardUserProfilePeer::getUnNomApePorUserId( $orden->getSfGuardUserId() );
          $htOrdenSolicitante[$orden->getId()]= $nombreCompleto;
      }
      $this->htOrdenSolicitante = $htOrdenSolicitante;

      //Para descargar el pdf de la orden de servicio
      if( $peticion->isMethod('post') )
      {
          $this->forward('pdf_orden_servicio','index');
      }
  }

  public function executePdf(sfWebRequest $peticion)
  {
        if( $peticion->getParameter('idOS') > 0  ){

        //OrdenServicio : OsSolicitante Object
        $orden_servicio = OsSolicitantePeer::getOsPorId( $peticion->getParameter('idOS') );
        // pdf object
        $pdf = new MYPDF( PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'ISO-8859-1', false );
        // PARA EL HEADER
        // $pdf->num_orden = $orden_servicio->getId();
        $pdf->orden_servicio = $orden_servicio;
        /* Observaciones generales para esta Orden de Servicio */
        $observaciones=$orden_servicio->getObservaciones();
        /* Usuario Encargado de Procesar esta Orden de Servicio */
        $perfil_usuario_que_procesa = sfGuardUserProfilePeer::getPerfilUsuarioPorIdPermiso( $orden_servicio->getsfGuardPermission()->getId() );
        /* Usuario Gerente de Operaciones */
        $perfil_usuario_que_aprobo = sfGuardUserProfilePeer::getPerfilPorIdUsuario( $orden_servicio->getAprobadoPorUsuarioId() );
        /* Usuario que crea la Ordende Compra */
        $perfil_usuario_solicitante = sfGuardUserProfilePeer::getPerfilPorIdUsuario( $orden_servicio->getSfGuardUserId() );


        // settings
        $autor='S.I.R.S. Clonsa';
        $TipoArchivo='ORDEN DE SERVICIO';
        $id=$perfil_usuario_solicitante->getNombres() . ' ' . $perfil_usuario_solicitante->getApellidos();
        $RealizadorDelaorden=$id;
        $pdf->SetFont("times", "", 12);
        $pdf->SetCreator($autor);
        $pdf->SetAuthor($autor);
        $pdf->SetTitle($TipoArchivo);
        $pdf->SetSubject($RealizadorDelaorden);
        $pdf->SetKeywords('TCPDF, PDF, example, test, guide');
        // set default header data
        $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING);
        // set header and footer fonts
        $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
        $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
        // set default monospaced font
        $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
        //set margins izquierda, arriba, derecha
        $pdf->SetMargins("15", "65", "15");
        $pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
        $pdf->SetFooterMargin("5");
        //set auto page breaks
        $pdf->SetAutoPageBreak(TRUE, "65");
        //set image scale factor
        $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
        //set some language-dependent strings
        //$pdf->setLanguageArray($l);
        // ---------------------------------------------------------
        // init pdf doc
        $pdf->AliasNbPages();
        $pdf->AddPage();
        $pdf->ColoredTable();
        //x,y,texto,borde,nueva linea o new line , justificacion,fill es un booleano que indica si la celda debe ser llenada ,link ,strecth , , , ,
        //$ignore_min_height(boolean)if true ignore automatic minimum height value.,caling(alineacion de la celda) y el otro es alineacion del texto
        //$pdf->MultiCell($w, $h, $txt, $border, $align, $fill, $ln, $x, $y, $reseth);
            //razon de cambio o derivada (73+11*($cantidadItems)+15).
        $X=$pdf->GetX();
        $Y=$pdf->GetY();
            $distancia=0;        
	if(  ($Y<=161) ){
	    $distancia=$Y+25;
	}else{
		$pdf->AddPage();
		$distancia=73;
	 }
	$pdf->SetFont('helvetica', 'B', 7);
	$pdf->Multicell(41, 5, 'OBSERVACIONES GENERALES: ', 0,'L',0, false,15,$distancia,true);
	$pdf->SetFont('helvetica', '', 7);
	$pdf->Multicell(139, 5, $observaciones, 0,'L',0, false,56,$distancia,true);
	$pdf->SetFont('helvetica', 'B', 7);
        //Fila 1 Revisado Por
        $pdf->Multicell(43, 5, 'REVISADO POR:', 1,'L',0, false,66,$distancia+17,true);
        //fin
	$pdf->Multicell(43, 5, 'PROCESADO POR:', 1,'L',0, false,109,$distancia+17,true);
	$pdf->Multicell(43, 5, 'APROBADO POR:', 1,'L',0, false,152,$distancia+17,true);
        //Fila 2 Cargo de quien revisa
        $pdf->Multicell(18, 8, 'CARGO:', 1,'L',0, false,66,$distancia+22,true);
	$pdf->SetFont('helvetica', '', 7);
	$pdf->Multicell(25, 8, '[BLABLABLABA Y BLABLA]', 1,'C',0, false,84,$distancia+22,true);
	$pdf->SetFont('helvetica', 'B', 7);
        //fin
	$pdf->Multicell(18, 8, 'CARGO:', 1,'L',0, false,109,$distancia+22,true);
	$pdf->SetFont('helvetica', '', 7);
	$pdf->Multicell(25, 8, $perfil_usuario_que_procesa->getCargo(), 1,'C',0, false,127,$distancia+22,true);
	$pdf->SetFont('helvetica', 'B', 7);
	$pdf->Multicell(18, 8, 'CARGO:', 1,'L',0, false,152,$distancia+22,true);
	$pdf->SetFont('helvetica', '', 7);
	$pdf->Multicell(25, 8, $perfil_usuario_que_aprobo->getCargo(), 1,'C',0, false,170,$distancia+22,true);
	$pdf->SetFont('helvetica', 'B', 7);
        //Fila 3 Nombre del que revisa
        $pdf->Multicell(18, 8, 'NOMBRE:', 1,'L',0, false,66,$distancia+30,true);
	$pdf->SetFont('helvetica', '', 7);
	$pdf->Multicell(25, 8, '[BLABLAA ZAMORA]', 1,'C',0, false,84,$distancia+30,true);
	$pdf->SetFont('helvetica', 'B', 7);
        //fin
	$pdf->Multicell(18, 8, 'NOMBRE:', 1,'L',0, false,109,$distancia+30,true);
	$pdf->SetFont('helvetica', '', 7);
	$pdf->Multicell(25, 8, $perfil_usuario_que_procesa->getNombres().' '.
                $perfil_usuario_que_procesa->getApellidos(), 1,'C',0, false,127,$distancia+30,true);
	$pdf->SetFont('helvetica', 'B', 7);
	$pdf->Multicell(18, 8, 'NOMBRE:', 1,'L',0, false,152,$distancia+30,true);
	$pdf->SetFont('helvetica', '', 7);
	$pdf->Multicell(25, 8, $perfil_usuario_que_aprobo->getNombres().' '.
                $perfil_usuario_que_aprobo->getApellidos(), 1,'C',0, false,170,$distancia+30,true);
	$pdf->SetFont('helvetica', 'B', 7);
	$pdf->Multicell(18, 8, 'FECHA:', 1,'L',0, false,109,$distancia+38,true);
	$pdf->SetFont('helvetica', '', 7);
	$pdf->Multicell(25, 8, '[FECHA PROC]', 1,'C',0, false,127,$distancia+38,true);
	$pdf->SetFont('helvetica', 'B', 7);
        //nuevp 4
        $pdf->Multicell(18, 8, 'FECHA:', 1,'L',0, false,66,$distancia+38,true);
	$pdf->SetFont('helvetica', '', 7);
	$pdf->Multicell(25, 8, '[FECHA REV]', 1,'C',0, false,84,$distancia+38,true);
	$pdf->SetFont('helvetica', 'B', 7);
        //fin
	$pdf->Multicell(18, 8, 'FECHA:', 1,'L',0, false,152,$distancia+38,true);
	$pdf->SetFont('helvetica', '', 7);
	$pdf->Multicell(25, 8, '[FECHA APRO]', 1,'C',0, false,170,$distancia+38,true);
	$pdf->SetFont('helvetica', 'B', 7);
	$pdf->Multicell(40, 8, '[fecha de impresión : '.date('d-m-Y').']', 0,'L',0, false,15,$distancia+36,true);
    $pdf->Output('orden_de_servicio_0'.$orden_servicio->getId().'.pdf', 'I');
    }//FIN if.
    else{
        $this->redirect('pdf_orden_servicio/ordenes');
    }
 }
}


class MYPDF extends TCPDF {

        /** Se usa $orden_servicio para recibir el objeto OsSolicitante que contiene un regidtro de una Orden de Servicio **/
        public $orden_servicio = null ;        

        //Page header
	public function ColoredTable() {
        // Colors, line width and bold font
        //$this->SetFillColor(255, 0, 0);
        //$this->SetTextColor(0,255);
        $this->SetFillColor(255, 0, 0);
        $this->SetTextColor(255);
        $this->SetDrawColor(128, 0, 0);
		$this->SetLineWidth(0.5);
        $this->SetFont('helvetica', '', 7);
        $w = array(38, 44, 20, 16,20,36);
        $titulo = array('Descripción', 'Proveedor Sugerido', '*Costo Referencia', 'Fecha Cierre', 'Tipo Solicitud', 'Observaciones');
        $y=65;
        $posicionprevia=21;
		for ($h=0; $h<6;$h++){
			$this->MultiCell($w[$h],8,$titulo[$h], 1, 'L', 1, false,$posicionprevia,$y,true);
			$posicionprevia=$posicionprevia+$w[$h];
		}
		// Color and font restoration
        // $this->SetFillColor(224, 235, 255);
        // $this->SetTextColor(0);
		$this->SetLineWidth(0.3);
        $this->SetFillColor(224, 235, 255);
        $this->SetTextColor(0);
        $this->SetFont('helvetica', '', 7);
        

        /* Se usa $solicitudes para cargar las solicitudes pertenecientes a esta ordende servicio */
        $solicitudes = ItemOsPeer::getItemsPorOsId( $this->orden_servicio->getId() );
        $cantidadItems = count( $solicitudes );
		$fill=0;
		$y=60+13;
        for ($i=1; $i<=$cantidadItems;$i++){
            /* Inicialización de variables */
            $solicitud = $solicitudes[$i-1];// Objeto con un registro de la tabla ItemOs correspondiente a esta Orden de Servicio
            $cant = $solicitud->getCantidad();
            $costo_refrerencia = $solicitud->getCostoRef();
            $descripcion = $solicitud->getDescripcion() ;
            $estado_solicitud = $solicitud->getEstadoSolicitud()->getNombreEstado();
            $fecha_cierre = $solicitud->getFechaCierre('d-m-Y');
            if( !is_null( $solicitud->getProveedor() ) ){
                $proveedor_sugerido = $solicitud->getProveedor()->getNombre();
            }
            $tipo_unidad = $solicitud->getUnidadItemOs()->getTipoUnidad();
            $tipo_solicitud = $solicitud->getTipoSolicitud()->getTipo();            
            $posicionprevia=21;
            /* Fin de Inicialización */

            //$pdf->MultiCell($w, $h, $txt, $border, $align, $fill, $ln, $x, $y, $reseth);
            $this->MultiCell(8,11,$i,0, 'J', 0, 0, 15, $y, true, 0, false, true,11, 'M');
            $this->MultiCell($w[0], 11, $cant.'['.$tipo_unidad.'] '.$descripcion,1,'L', $fill, false,$posicionprevia,$y,true);
            $posicionprevia=$posicionprevia+$w[0];
            $this->MultiCell($w[1], 11, $proveedor_sugerido,1,'L', $fill, false,$posicionprevia,$y,true);
            $posicionprevia=$posicionprevia+$w[1];
            $this->MultiCell($w[2], 11, $costo_refrerencia,1,'L', $fill, false,$posicionprevia,$y,true);
            $posicionprevia=$posicionprevia+$w[2];
            $this->MultiCell($w[3], 11, $fecha_cierre,1,'L', $fill, false,$posicionprevia,$y,true);
            $posicionprevia=$posicionprevia+$w[3];
            $this->MultiCell($w[4], 11, $tipo_solicitud,1,'L', $fill, false,$posicionprevia,$y,true);
            $posicionprevia=$posicionprevia+$w[4];
            $this->MultiCell($w[5], 11, '[observaciones]. Solicitud: '.$estado_solicitud, 1,'L', $fill, false,$posicionprevia,$y,true);
            $y=$y+11;
            if((($i%14)==0) and ($i<>$cantidadItems)){
              $this->AddPage();
              $y=73;
            }
            $fill=!$fill;
        }
        $this->SetDrawColor(0, 0, 0);
        //$this->Cell(array_sum($w), 0, '', 'T');
    }
    public function Header( ) {
        // Logo
        $image_file = K_PATH_IMAGES.'logo_clonsa1.png';
        $this->Image($image_file, 24, 2, 18, 20, 'PNG', '', 'T', false, 300, '', false, false, 1, false, false, false);
        $this->SetFont('helvetica', 'B', 12);
        $this->ln(10);

        /* Se recibe el objeto que contiene la información del registro de la talba OsSolicitante*/
        $orden_servicio = $this->orden_servicio;

        $this->Cell(180, 5, 'ORDEN DE SERVICIO N°' . $orden_servicio->getId(), 0, false, 'C', 0, '', 0, false, 'M', 'M');
        $this->ln(15);
		$this->SetFont('helvetica', 'B', 10);

        /* Nombre Completo del Solicitante, autor de la Orden de Servicio */
        $datos_perfil_solicitante = sfGuardUserProfilePeer::getPerfilPorIdUsuario( $orden_servicio->getSfGuardUserId() );
	$NombreSolicitante= $datos_perfil_solicitante->getNombres() . ' ' . $datos_perfil_solicitante->getApellidos();
        $this->Cell(170, 5, 'SOLICITA			: Sr(a) ' . $NombreSolicitante, 0, false, 'L', 0, '', 0, false, 'M', 'M');
        $this->ln(6);

        /* Centro de Costos */
        $centro_costos = $orden_servicio->getCentroCostos();
        $NombreProyecCentroCost = $centro_costos->getNombre();
        $this->Cell(100, 5, 'PROYECTO: ' . $NombreProyecCentroCost, 0, false, 'L', 0, '', 0, false, 'M', 'M');
	/* Fecha creación */
        $fecha=$orden_servicio->getFechaCreacion('d-m-Y');
        $this->Cell(80, 5, 'FECHA EMISION	: ' . $fecha, 0, false, 'R', 0, '', 0, false, 'M', 'M');
		$this->ln(6);
        /* Estado Orden de Servicio */
        $estado_orden_servicio = $orden_servicio->getEstadoOs();
        $Estado = $estado_orden_servicio->getEstado();
		$this->Cell(170, 5, 'ESTADO 	   : ' . $Estado, 0, false, 'L', 0, '', 0, false, 'M', 'M');
        $this->ln(6);
        $this->SetFont('helvetica', '', 7);
		$info='DEPARTAMENTO ADQUISICIONES';
		$info1='CLONSA INGENIERIA LIMITADA';
		$info2='PARA ASISTENCIA TELEFÓNICA Y SOPORTE LLAMAR A CEL: 92928888';
		$this->Cell(170, 5, $info, 0, false, 'L', 0, '', 0, false, 'M', 'M');
		$this->ln(3);
		$this->Cell(170, 5, $info1, 0, false, 'L', 0, '', 0, false, 'M', 'M');
		$this->ln(3);
	    $this->Cell(170, 5, $info2, 0, false, 'L', 0, '', 0, false, 'M', 'M');
    }

    // Page footer
    public function Footer() {
        // Position at 10 mm from bottom
        $this->SetY(-10);
        // Set font
        $this->SetFont('helvetica', 'I', 8);
        // Page number

        $this->Cell(0, 5, 'Página '.$this->getAliasNumPage().'/'.$this->getAliasNbPages(), 0, false, 'C', 0, '', 0, false, 'T', 'M');
    }
}

